/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	HEditor.java
 * 模块说明：	
 * 修改历史：
 * Aug 28, 2007 - lxm - 创建。
 */
package com.hd123.rumba.jsp.table;

/**
 * 表格单元编辑器
 * 
 * @author lxm
 * 
 */
public abstract class HEditor {

  /**
   * 构造函数。
   * 
   * @param params
   *          其它参数数组。可用的参数说明参见相应的属性说明。
   */
  public HEditor(Object[] params) {
    super();

    for (int i = 0; i < params.length;) {
      String paramName = (String) params[i++];
      Object paramValue = params[i++];
      this.readParam(paramName, paramValue);
    }
  }

  private HColumnDef columnDef;

  /** 属性：所属列定义。 */
  public HColumnDef getColumnDef() {
    return columnDef;
  }

  void setColumnDef(HColumnDef columnDef) {
    this.columnDef = columnDef;
  }

  /**
   * 读取参数。
   * <p>
   * 
   * 开放给派生类以重写，用于新增加参数的解析。
   * 
   * @param paramName
   *          指定参数名。
   * @param paramValue
   *          指定参数取值。
   * @return 是否被成功解释。
   */
  protected abstract boolean readParam(String paramName, Object paramValue);

  /**
   * 输出Javascript字符串。
   * 
   * @return
   */
  public String toJS() {
    StringBuffer sb = new StringBuffer();
    sb.append("var editor = new " + this.getClassNameJS() + "();\n");
    String configStr = this.buildConfigJS();
    if (configStr != null && !"".equals(configStr.trim()))
      sb.append("editor.config({" + configStr + "});\n");
    sb.append("colDef.setEditor(editor);\n");
    return sb.toString();
  }

  /**
   * 取得对应的Javascript中的类名。
   * 
   * @return
   */
  protected abstract String getClassNameJS();

  /**
   * 构造Javascript语句，配置参数部分。
   * 
   * @return
   */
  protected abstract String buildConfigJS();
}
